/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nys.conci.usuario.bean;

import com.nys.conci.backend.entidad.Identidad;
import com.nys.conci.base.BeanBase;
import com.nys.conci.base.excepcion.ExcepcionManager;
import com.nys.conci.base.utilitario.FechaUtil;
import com.nys.conci.citas.entidad.ControlCita;
import com.nys.conci.citas.servicio.ServicioControlCitas;
import com.nys.conci.cliente.entidad.Pago;
import com.nys.conci.cliente.entidad.Persona;
import com.nys.conci.cliente.entidad.PlanPago;
import com.nys.conci.cliente.modelo.ModeloPagoClientes;
import com.nys.conci.usuario.servicio.ServicioAdministracion;
import com.nys.conci.usuario.servicio.ServicioControlUsuario;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;

/**
 *
 * @author Yeudy10
 */
@ManagedBean
@ViewScoped
public class BeanPagosUsuarios extends BeanBase {

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<     VARIABLES     >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    @Inject
    private ServicioControlUsuario scu;
    @Inject
    private ServicioControlCitas scc;
    @Inject
    private ServicioAdministracion sa;
    @Inject
    private Identidad identidad;
    private List<Persona> listado_persona_usuario;
    private List<ModeloPagoClientes> listado_pagos;
    private ModeloPagoClientes modelo_select;
    private ModeloPagoClientes modelo_tabla;
    private Persona persona_usuario_tabla;
    private Persona persona_usuario_select;
    private String identificacion_u;
    private String dscUsuario;
    private BigDecimal total;
    private String tipo_pago;
    private Date fecha;
    private boolean habilitar;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<  INICIALIZARORES  >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * Constructor
     */
    public BeanPagosUsuarios() {
        this.inicializar();
    }

    /**
     * Inicializa las variables del bean, al acceder al constructor
     */
    private void inicializar() {
        try {
            setFecha(new Date());
            tipo_pago = "";
            setTotal(BigDecimal.ZERO);
            setHabilitar(true);            
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * Inicializas las variables y atributos del bean, despues del llamado del
     * constructor. Es utilizado para las inicializaciones que utilicen datos de
     * objetos injectados.
     */
    @Override
    @PostConstruct
    public void inicializarPost() {
        identificacion_u = identidad.getIdentificacion();
        dscUsuario = identidad.getNombre();
        cargarUsuarios();
        cargarPagosUsuario();
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      MÉTODOS      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    public void cargarUsuarios() {
        try {
            setListado_persona_usuario(new ArrayList<Persona>());
            setListado_persona_usuario(scu.consultarPersonas("U"));
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void cargarPagosUsuario() {
        try {
            total=BigDecimal.ZERO;
            listado_pagos = new ArrayList<ModeloPagoClientes>();
            List<ControlCita> lista_citas = scc.consultaListaCitasUsuario(identificacion_u, fecha, tipo_pago);
            for (ControlCita controlCita : lista_citas) {
                Pago pago = sa.consultarPagoCitaId(controlCita.getId_cita());
                Persona persona = scu.consultarPersona(controlCita.getIdentificacion_c());
                String nombre  = persona.getNombre()+" "+persona.getApellido1()+" "+persona.getApellido2();
                PlanPago plan = scc.consultarPlanPagoCliente(pago.getId_plan_pago());
                ModeloPagoClientes modelo = new ModeloPagoClientes();
                modelo.setEspecialidad(sa.consultarEspecialidad(pago.getId_especialidad()).getNombre());
                if (pago != null) {
                    
                modelo.setFecha(FechaUtil.convertirFecha(pago.getFecha(), "dd-MM-yyyy"));
                modelo.setMonto(pago.getMonto());
                }
                
                modelo.setNombre_cliente(nombre);
                if (plan != null) {
                    modelo.setPlan_pago(plan.getNombre());
                }
                total = total.add(pago.getMonto());
                listado_pagos.add(modelo);
            }
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void seleccionarUsuario() {
        try {
            setPersona_usuario_select(getPersona_usuario_tabla());
            setIdentificacion_u(getPersona_usuario_select().getIdentificacion());
            setDscUsuario(getPersona_usuario_select().getNombre() + " " + getPersona_usuario_select().getApellido1() + " " + getPersona_usuario_select().getApellido2());
            setPersona_usuario_select(new Persona());
            setPersona_usuario_tabla(new Persona());

        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    public void limpiar() {
        identificacion_u = identidad.getIdentificacion();
        dscUsuario = identidad.getNombre();
        setTipo_pago("");
        fecha = new Date();        
        setHabilitar(true);
        cargarPagosUsuario();
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      GET & SET      >>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<  
    /**
     * @return the listado_persona_usuario
     */
    public List<Persona> getListado_persona_usuario() {
        return listado_persona_usuario;
    }

    /**
     * @param listado_persona_usuario the listado_persona_usuario to set
     */
    public void setListado_persona_usuario(List<Persona> listado_persona_usuario) {
        this.listado_persona_usuario = listado_persona_usuario;
    }

    /**
     * @return the persona_usuario_tabla
     */
    public Persona getPersona_usuario_tabla() {
        return persona_usuario_tabla;
    }

    /**
     * @param persona_usuario_tabla the persona_usuario_tabla to set
     */
    public void setPersona_usuario_tabla(Persona persona_usuario_tabla) {
        this.persona_usuario_tabla = persona_usuario_tabla;
    }

    /**
     * @return the persona_usuario_select
     */
    public Persona getPersona_usuario_select() {
        return persona_usuario_select;
    }

    /**
     * @param persona_usuario_select the persona_usuario_select to set
     */
    public void setPersona_usuario_select(Persona persona_usuario_select) {
        this.persona_usuario_select = persona_usuario_select;
    }

    /**
     * @return the identificacion_u
     */
    public String getIdentificacion_u() {
        return identificacion_u;
    }

    /**
     * @param identificacion_u the identificacion_u to set
     */
    public void setIdentificacion_u(String identificacion_u) {
        this.identificacion_u = identificacion_u;
    }

    /**
     * @return the dscUsuario
     */
    public String getDscUsuario() {
        return dscUsuario;
    }

    /**
     * @param dscUsuario the dscUsuario to set
     */
    public void setDscUsuario(String dscUsuario) {
        this.dscUsuario = dscUsuario;
    }

    /**
     * @return the total
     */
    public BigDecimal getTotal() {
        return total;
    }

    /**
     * @param total the total to set
     */
    public void setTotal(BigDecimal total) {
        this.total = total;
    }

    /**
     * @return the tipo_pago
     */
    public String getTipo_pago() {
        return tipo_pago;
    }

    /**
     * @param tipo_pago the tipo_pago to set
     */
    public void setTipo_pago(String tipo_pago) {
        this.tipo_pago = tipo_pago;
    }

    /**
     * @return the fecha
     */
    public Date getFecha() {
        return fecha;
    }

    /**
     * @param fecha the fecha to set
     */
    public void setFecha(Date fecha) {
        this.fecha = fecha;
    }

    /**
     * @return the habilitar
     */
    public boolean isHabilitar() {
        return habilitar;
    }

    /**
     * @param habilitar the habilitar to set
     */
    public void setHabilitar(boolean habilitar) {
        this.habilitar = habilitar;
    }

    /**
     * @return the listado_pagos
     */
    public List<ModeloPagoClientes> getListado_pagos() {
        return listado_pagos;
    }

    /**
     * @param listado_pagos the listado_pagos to set
     */
    public void setListado_pagos(List<ModeloPagoClientes> listado_pagos) {
        this.listado_pagos = listado_pagos;
    }

    /**
     * @return the modelo_select
     */
    public ModeloPagoClientes getModelo_select() {
        return modelo_select;
    }

    /**
     * @param modelo_select the modelo_select to set
     */
    public void setModelo_select(ModeloPagoClientes modelo_select) {
        this.modelo_select = modelo_select;
    }

    /**
     * @return the modelo_tabla
     */
    public ModeloPagoClientes getModelo_tabla() {
        return modelo_tabla;
    }

    /**
     * @param modelo_tabla the modelo_tabla to set
     */
    public void setModelo_tabla(ModeloPagoClientes modelo_tabla) {
        this.modelo_tabla = modelo_tabla;
    }
}
